package com.atguigu.spzx.manager.task;

import com.atguigu.spzx.manager.service.OrderService;
import com.atguigu.spzx.manager.service.OrderStatisticsService;
import com.atguigu.spzx.model.entity.order.OrderStatistics;
import jakarta.annotation.Resource;
import org.joda.time.DateTime;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.math.BigDecimal;
import java.util.Date;

/*
    定时任务框架：
        1、线程池的定时任务
            可以延迟 按照时间间隔定期执行任务
        2、jdk提供的Timer
        3、springtask定时任务
            spring-context包提供的
                EnableScheduling: 启用定时任务
                Scheduled: 标注的方法就是一个定时任务

 */
@Component
public class SpzxTask {
//    @Scheduled(cron = "5,13,22,40,0/10 * * * * ?") //cron表达式： 一般6~7位组成(秒 分 时 日 月 周 年)
//    public void task1(){
//        //每分钟的5秒 13/22/40秒执行一次定时任务
//        System.out.println(new Date());
//    }
    @Resource
    OrderService orderService;
    @Resource
    OrderStatisticsService orderStatisticsService;
    @Scheduled(cron = "0 0 3 * * ?") //每天凌晨3点整执行()
//    @Scheduled(cron = "0 37 9 * * ?") //每天凌晨3点整执行()
    public void generateOrderStatistics(){
        //获取昨天的年月日字符串
        String orderDate = new DateTime().minusDays(1).toString("yyyy-MM-dd");
        OrderStatistics statistics = orderService.getOrderStatisticsByDate(orderDate);
        if(statistics.getOrderDate()==null){
            //如果统计的那一天没有订单，保存0
            statistics.setOrderDate(new DateTime().minusDays(1).toDate());
            statistics.setTotalAmount(new BigDecimal(0));
            statistics.setTotalNum(0);
        }
        orderStatisticsService.save(statistics);
    }
}
